package cn.zhfeat.hatch.web.service;

import java.util.List;
import cn.zhfeat.core.base.BaseResultModel;
import cn.zhfeat.hatch.dto.sysuser.SysAuthorityDto;
import cn.zhfeat.hatch.dto.sysuser.SysUserDto;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;

/**
 * @description: 用户登录接口层
 *
 * @author ZhangHao
 * @date 2018年5月17日 下午3:51:49 
 * @version 1.0.0.1
 */
public interface ILoginService {

	/**
	 * @description: 用户通过用户名密码登录
	 *
	 * @param dto
	 * @return 
	 * @author ZhangHao
	 * @date 2018年5月17日 下午3:48:39 
	 * @version 1.0.0.1
	 */
	BaseResultModel ajaxLogin(SysUserDto dto);

	
    /**
     * @description: 
     * 首次加载页面时，根据用户点击的一级菜单权限ID，从登陆用户角色对应的所有的权限中匹配其对应的二级菜单和三级菜单
     * @param dto
     * @return 
     * @author ZhangHao
     * @date 2018年5月21日 上午12:47:56 
     * @version 1.0.0.1
     */
	Object ajaxAuthsInfo(SysAuthorityDto dto);


    /**
     * @description: 退出登陆接口
     *
     * @return 
     * @author ZhangHao
     * @date 2018年5月27日 下午5:56:40 
     * @version 1.0.0.1
     */
	Object ajaxExitLogin();

    /**
     * @description: 从session中拿到所有的权限url，
     * 用于判断用户返回时当前页面是否是最后一页
     *
     * @return 
     * @author ZhangHao
     * @date 2018年6月2日 上午9:57:45 
     * @version 1.0.0.1
     */
	Object ajaxAuthsUrl();
	
	/**
	 * @description: 踢出指定在线用户
	 * 1、根据userId清除用户对应的一组权限
	 * 2、根据sessionId设置用户登陆会话为失效
	 *
	 * @return 
	 * @author ZhangHao
	 * @date 2018年6月1日 上午11:46:44 
	 * @version 1.0.0.1
	 */
	Boolean KickOutTheOnlineUser(String sessionId,String userId);

	/**
	 * @description: 从redis中判断当前session是否失效
	 *
	 * @param
	 * @author ZhangHao
	 * @date 2018/8/8 13:59
	 * @version 1.0.0.1
	 * @return java.lang.Object
	 */
    Object ajaxGetShiroSession();

	/**
	 * @description: 判断token是否存在，是否过期接口，如果存在且未过期，根据token按规则生成ticket
	 *
	 * @param
	 * @author ZhangHao
	 * @date 2018/8/27 11:30
	 * @version 1.0.0.1
	 * @return java.lang.Object
	 */

	Object validateToken(HttpServletRequest request);

	/**
	 * @description: 根据用户名、密码、创建时间生成token，更新数据库(内部使用)
	 *
	 * @param
	 * @author ZhangHao
	 * @date 2018/8/27 11:44
	 * @version 1.0.0.1
	 * @return java.lang.Object
	 */

    Object createToken(HttpServletRequest request);

    /**
     * @description:
     * 根据ticket全局票据，按规则解析成token，根据token从DB拿到用户名密码，
     * 根据用户名密码进行授权操作。更新token失效时间为当前时间。转发到登陆页面
     *
     * @param
     * @author ZhangHao
     * @date 2018/8/27 13:19
     * @version 1.0.0.1
     * @return org.springframework.web.servlet.ModelAndView
     */

    ModelAndView validateTicket(HttpServletRequest request);
}
